package controller;

import aplication.Rotulador;
import controller.dialog.DialogMessage;
import data.JaxBXMLResultados;
import data.RepositorioDeQuestoes;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import java.util.logging.Level;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.input.MouseEvent;
import model.Avaliacao;

/*
 * Controller para tela de historicos de avaliaçoes.
 */
public class RanckController implements Initializable, EventHandler<MouseEvent> {

    @FXML
    private ListView listaRack;
    private List<Avaliacao> avaliacoes;
    @FXML
    private Button buttonVisualizar;
    private Avaliacao avaliacao;

    /*
     * metodo de inicialização da cena
     * popular a lista com as avaliações.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        ObservableList<String> topicos = FXCollections.observableArrayList();
        avaliacoes = JaxBXMLResultados.loadAvaliacoes().getAvaliacoes();
        if (avaliacoes != null) {
            for (Avaliacao avaliacao : avaliacoes) {
                topicos.add(avaliacao.getUsuario().getNome() + " - " + avaliacao.getPostos() + " Postos");
            }
            listaRack.setItems(topicos);
        } else {
            DialogMessage.getIntancia().show("Não ha avalição salvas!");
            Rotulador.getLOGGER().logp(Level.INFO, getClass().getSimpleName(), "initialize", "Não ha avalição salvas!");
        }
        listaRack.setOnMouseClicked(this);
    }

    /*
     * metodo para voltar para tela principal...
     */
    @FXML
    public void voltar(ActionEvent event) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("/view/Principal.fxml"));
        Rotulador.getInstace().setStage(root);
    }

    /*
     * metodo para deixar o button visualizar visivel quando clickado em uma avaliaçao
     */
    @Override
    public void handle(MouseEvent t) {
        buttonVisualizar.setVisible(true);
        avaliacao = avaliacoes.get(listaRack.getSelectionModel().getSelectedIndex());
    }

    /*
     * metodo que chama a tela de resultados 
     */
    @FXML
    public void visualizar(ActionEvent actionEvent) {
        RepositorioDeQuestoes.getInstance().setAvaliacao(avaliacao);
        try {
            Parent root = FXMLLoader.load(getClass().getResource("/view/Resultado.fxml"));
            Rotulador.getInstace().setStage(root);
        } catch (IOException ex) {
            Rotulador.getLOGGER().logp(Level.SEVERE, "log.HandlerChangeHtml", "loadResultado", ex.getMessage());
        }
    }

}
